<#--
 | 取得时间的function，省去了各种判断
 -->
<#function getTime time="">
	<#if time?is_date>
		<#return time?date("yyyy-MM-dd HH:mm:ss")>
		<#else>
			<#return time>
	</#if>
</#function>

<#--
 | 取得时间的function，省去了各种判断
 -->
<#function getDate time="">
	<#if time?is_date>
		<#return time?date("yyyy-MM-dd")>
		<#else>
			<#return time>
	</#if>
</#function>


<#-- 下拉选择 常量表 -->

<#--计费类型常量数组-->
<#assign PRICE_TYPE={"01":"重量"
					,"02":"体积"
					,"03":"数量"}>
<#--布尔类型数组-->
<#assign YES_NO={"N":"否"
				,"Y":"是"}>
<#--可以在这里定义新的常量数组-->

<#--性别常量数组-->
<#assign SEX_TYPE={"M":"男"
				,"F":"女"}>
<#--可以在这里定义新的常量数组-->

<#--
 | 常量数组注册表
 | 将常量类型和常量数组以键-值对的形式存放在一个集合中
 | 如果要增加新的常量类型和列表，请在后面加入
 -->
<#assign REGISTER_MAP={"yesNo":YES_NO
						,"pricetype":PRICE_TYPE
						,"sexType":SEX_TYPE
						<#--在这里加入自定义的常量类型和它的数组-->
						
						}>
<#--
 | 常量下拉框
 | 创建者:杨涛
 | 创建时间:2009-05-08
 | 版本:1.0
 | 参数说明:
 | name:		生成的label或者下拉单的名称，如果不输入，将取默认值const
 | id:			生成的label或者下拉单的id，如果不输入，将取默认值const
 | value:		生成的下拉单的默认选择值，如果不输入，将取默认值""
 | class:		生成的下拉单或者label的样式，如果不输入，将采用默认样式
 | type:		决定下拉单的类型，非常重要的属性，如果不输入将使用默认值yesNo，即是否下拉单
 | islabel:		决定生成label还是下拉单的标志，默认为false，即生成下拉单，如果设为true，
 | 				将根据value的值以及type属性，取出常量的名称，用label标签输出
 | 使用示例:	<@const name="isDel" id="isDel" />,<@const type="pricetype"/>
 -->
<#macro const name="const",id="const",value="",class="select",type="yesNo" islabel=false emptyOption=false style="width:125px;">
<#local hash=REGISTER_MAP[type]>
<#if islabel>
	<label name="${name}" id="${id}" class="${class}">${hash["${value}"]!}</label>
<#else>
	<select name="${name}" id="${id}" value="${value}" class="${class}" style="${style}">
		<#if emptyOption>
			<option value=""></option>
		</#if>
		<#list hash?keys as key>
			<#if value==key>
				<option value=${key} selected>${hash[key]!}</option>
			<#else>
				<option value=${key}>${hash[key]!}</option>
			</#if>
		</#list>
	</select>
</#if>
</#macro>

<#--
 | 日期选择框，不带日历图标
 | 创建者:杨涛
 | 创建时间：2009-05-08
 | 版本:1.0
 | 参数说明:
 |	name:		日期选择框的name属性，默认为datePicker
 |	id:			日期选择框的id属性，默认为datePicker
 |	class:		日期选择框的class属性，默认为requireInput
 |	value:		日期选择框的值，默认为空字符串
 |	readonly:	是否只读，默认为true,即只读
 |	showTime:	是否只读，默认为false,即不带时间，设置为true,带时间
 | 使用示例:	<@datePicker name="cityView.createTime" id="createTime" value=cityView.createTime/>
 | tips:		使用时，value一般为model里面定义的属性值，注意不要加""
 -->
<#macro datePicker name="datePicker",id="datePicker",class="",value="",readonly=false,showTime=false>
<input type="text" name="${name}" id="${id}" class="${class}"<#rt>
	<#if readonly>
		readonly<#rt>
	</#if> 
	<#if showTime>
		onfocus="WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss'})" value="${getTime(value)}" size="15"/>
	<#else>
		onfocus="WdatePicker()" value="${getDate(value)}" style="width:70px" />
	</#if>
</#macro>

<#--
 | 日期选择框，带日历图标:长度可以通过style="width:70px;"定义
 | 创建者:杨涛
 | 创建时间：2009-05-08
 | 版本:1.0
 | 参数说明:
 |	name:		日期选择框的name属性，默认为datePicker
 |	id:			  	日期选择框的id属性，默认为datePicker
 |	class:			日期选择框的class属性，默认为requireInput
 |	value:		日期选择框的值，默认为空字符串
 |	readonly:	是否只读，默认为true,即只读
 |	img:			指定日历图标的位置，默认使用My97DatePicker的日历图标
 |	showTime:	是否只读，默认为false,即不带时间，设置为true,带时间
 | 使用示例:	<@dateCalendar name="cityView.createTime" id="createTime" value=cityView.createTime/>
 | 使用时，value一般为model里面定义的属性值，注意不要加""
 -->
<#macro dateCalendar name="datePicker",id="datePicker",class="",style="",showTime=false,value="",readonly=false,img="${path}/js/My97DatePicker/skin/datePicker.gif" size="6">
<input type="text" name="${name}" id="${id}" class="${class}" style="${style}" size="${size}"<#rt>
<#if readonly>
	readonly<#rt>
</#if> 
<#if showTime>
	onfocus="WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss'})" value="${getTime(value)}" />
	<img onclick="WdatePicker({el:$dp.$('${id}'),dateFmt:'yyyy-MM-dd HH:mm:ss'})" src="${img}" width="16" height="22" align="absmiddle" style="cursor:hand" />
<#else>
	onfocus="WdatePicker()" value="${getDate(value)}" />
	<img onclick="WdatePicker({el:$dp.$('${id}')})" src="${img}" width="16" height="22" align="absmiddle" style="cursor:hand"/>
</#if> 
</#macro>

<#--
 | 复选框:支持修改，查看的时候可以用<@const type="yesNo" islabel=true value=""/>这个进行查看会显示是、否
 | 创建者:杨涛
 | 创建时间:2009-05-13
 | 版本:1.0
 | 参数说明:
 | name:		生成的label或者下拉单的名称，如果不输入，将取默认值ids
 | id:			生成的label或者下拉单的id，如果不输入，将取默认值ids
 | default:     默认值
 | value：       实际值  如果默认值与实际值相等的就会画出一个checkBox框并且为选中状态，反知为不选中。
 | 使用示例:	<@checkBox name="isChe" id="isChe" value="" />
 -->
<#macro checkbox name="checkbox" id="checkbox" value="N" checkedValue="Y" disabled=false readonly=false tabindex="" onclick="" onchange="">
<input type="checkbox" id="${id?html}" name="${name?html}" value="${checkedValue?html}"<#rt>
	<#if onchange!="">
	 onchange="${onchange}"<#rt>
	</#if>
	<#if onclick!="">
	 onclick="${onclick}"<#rt>
	</#if>
	<#if value==checkedValue>
	 checked="checked"<#rt>
	</#if>
	<#if disabled>
	 disabled<#rt>
	</#if>
	<#if readonly>
	 readonly<#rt>
	</#if>
	<#if tabindex !="">
	 tabindex="${tabindex}"<#rt>
	</#if>
/>
<input type="hidden" id="__checkbox_${id?html}" name="__checkbox_${name?html}" value="${checkedValue?html}" /> 
</#macro>

<#--
 | 下拉框
 | 创建者:杨涛
 | 创建时间：2010-05-20
 | 版本:1.0
 | 参数说明:
 |	type:	   下拉框的类型,(比如：VEHTYPE，FRIDGETYPE等)，必输参数
 |	name:	   下拉选择框的name属性，默认为name
 |	id:		   下拉选择框的id属性，默认为id
 |  value:     下拉选择框的value属性，默认为""，一般在修改时需要把下拉框的code传入，新增不传参数
 |  hasEmpty:  是否将下拉框的第一行设置为请选择，false将下拉框的第一行设置为请选择，反正第一行为数据库中的下拉数据
 |  style:     样式，不传参数默认为"width:125px;"
 |  disabled:  是否可修改，默认为false，可修改,true表示不可修改
 |  onclick:   鼠标单击时触发的事件,默认为""
 |  onchange:  下拉列表属性发生变化时触发的事件,默认为""
 |  onfocus:   失去焦点时触发的事件,默认为""
 |  headerKey：  选择框默认选择条件KEY
 |	headerValue：选择框默认选择条件VALUE
 |	hasAuth:		是否需要加权限其值为(isRole=false/true)默认为false
 | 使用示例:	<@select type="VEHTYPE" nameRegion="triSelectView.regionName" idRegion="regionName" isRole="false" value="" hasEmpty="true" headerKey="" headerValue="请选择"  multiple="false" style="width:125px;" disabled="false" />
 -->
<#macro select type="" list=[] name="name" id="id" value="" class="" style="width:100px" size=""
	hasEmpty=false headerKey="" headerValue="全部" disabled=false
	onchange="" onclick="" onfocus="" onblur="" hasAuth=false>
<#if hasAuth>
	<#if type!="" && optionMap["${type}"]??>
			<#list optionMap["${type}"] as item>
				<#local headerKey = headerKey + ",'" +item.value + "'">
			</#list>
			<#if (headerKey?length>0)>
				<#local headerKey = headerKey?substring(1)>
			</#if>
	<#elseif 0<list?size >
		<#list list as item>
			<#local headerKey = headerKey +",'" +item.value + "'">
		</#list>
		<#if (headerKey?length>0)>
				<#local headerKey = headerKey?substring(1)>
		</#if>
	</#if>
</#if>
<select name="${name}" id="${id}" style="${style}"<#rt>
	<#if size!="">
		size="${size}"
	</#if><#rt>
	<#if class!="">
		class="${class}"
	</#if><#rt>
	<#if onchange!="">
		onchange="${onchange}"<#rt>
	</#if>
	<#if onclick!="">
		onclick="${onclick}"<#rt>
	</#if>
	<#if onfocus!="">
		onfocus="${onfocus}"<#rt>
	</#if>
	<#if disabled>
		disabled<#rt>
	</#if>>
	<#if hasEmpty>
		<option value="${headerKey?html}">${headerValue?html}</option>
	</#if>
 	<#if type!="" && optionMap["${type}"]??>
		<#list optionMap["${type}"] as item>
			<option value="${item.value!}"<#rt>
				<#if value==item.value>
					selected<#rt>
				</#if>
				>${item.text!}</option>
		</#list>
	<#elseif 0<list?size >
		<#list list as item>
			<option value="${item.value!}"<#rt>
				<#if item.code??&&value==item.value>
					selected<#rt>
				</#if>
				>${item.text!}</option>
		</#list>
	</#if>
</select>
</#macro>

<#--
 | 多选下拉框
 | 创建者:杨涛
 | 创建时间：2010-05-20
 | 版本:1.0
 | 参数说明:
 |	type:	   下拉框的类型,(比如：VEHTYPE，FRIDGETYPE等)，必输参数
 |	name:	   下拉选择框的name属性，默认为name
 |	id:		   下拉选择框的id属性，默认为id
 |  value:     下拉选择框的value属性，默认为""，一般在修改时需要把下拉框的code传入，新增不传参数
 |  style:     样式，不传参数默认为"width:125px;"
 |  disabled:  是否可修改，默认为false，可修改,true表示不可修改
 |  onclick:   鼠标单击时触发的事件,默认为""
 |  onchange:  下拉列表属性发生变化时触发的事件,默认为""
 |  onfocus:   失去焦点时触发的事件,默认为""
 | 使用示例:<@mulselect list=[] name="name" id="id" value="" class="" />
 -->
<#macro mulselect type="" list=[] name="name" id="id" style="width:125px;" value="" class="" disabled=false
 onchange="" onclick="" onfocus="" onblur="">
<select id="__ms${id}" multiple style="${style}"<#rt>
	<#if class!="">
		class="${class}"<#rt>
	</#if>
	<#if onchange!="">
		onchange="${onchange}"<#rt>
	</#if>
	<#if onclick!="">
		onclick="${onclick}"<#rt>
	</#if>
	<#if onfocus!="">
		onfocus="${onfocus}"<#rt>
	</#if>
	<#if disabled>
		disabled<#rt>
	</#if>>
 	<#if type!="" && optionMap["${type}"]??>
		<#list optionMap["${type}"] as item>
			<option value="${item.value!}"<#rt>
				<#local valueArr = value?split(",")>
				<#list valueArr as valueItem>
					<#if valueItem==item.value>
						selected<#rt>
					</#if>
				</#list>
				>${item.text!}</option>
		</#list>
	<#elseif 0<list?size >
		<#list list as item>
			<option value="${item.value!}"<#rt>
				<#local valueArr = value?split(",")>
				<#list valueArr as valueItem>
					<#if valueItem==item.value>
						selected<#rt>
					</#if>
				</#list>
				>${item.text!}</option>
		</#list>
	</#if>
</select>
<input type="hidden" name="${name}" id="${id}" value=""/>
<script language="javascript" type="text/javascript">
$(function(){
	$('#__multipleSelect${id}').change(function(){
		var value=[];
		$.each($(this).attr('options'),function(index,option){
				if(option.selected == true){
					if(value.length == 0){
						value.push(option.value);
					}else{
						value.push(",");
						value.push(option.value);
					} 					
				}
			}
		)
		$('#${id}').val(value.join(''));
	})
})
</script>
</#macro>




<#--
 | 基本的宏文件，定义了常用的宏，所用宏里面使用的js是基于jQuery的。
 | 创建者:杨涛
 | 创建时间:2010-04-05
 | 版本:1.1 -->
<#macro timeSelector name>
<select id="_timeSelect${name}">
	<option value='_0'>
		时间段
	</option>
	<option value='_1'>
		今天
	</option>
	<option value='_2'>
		昨天
	</option>
	<option value='_3'>
		前天
	</option>
	<option value='_4'>
		最近两天
	</option>
	<option value='_5'>
		最近三天
	</option>
	<option value='_6'>
		最近一周
	</option>
	<option value='_7'>
		最近一月
	</option>
	<option value='_8'>
		最近半年
	</option>
	<option value='_9'>
		最近一年
	</option>
</select>
<div>
	<input name='${name}Fm' class='Wdate' size=13 type='text'
		   onfocus='WdatePicker()'/>
	&nbsp;至&nbsp;
	<input name='${name}To' class='Wdate' size=13 type='text'
		   onfocus='WdatePicker()'/>
</div>
<script type="text/javascript">
	dojo.ready(function() {
		dojo.byId("_timeSelect${name}").change(function() {
			var val = $(this).val();
			var i = "<input name='${name}' class='Wdate' size=13 type='text' value={1} />";
			var ii = "<input name='${name}Fm' class='Wdate' size=13 type='text' onfocus='WdatePicker()' value={1} />"
					+ "&nbsp;至&nbsp;<input name='${name}To' class='Wdate' size=13 type='text' onfocus='WdatePicker()' value={2} />";
			$(this).next().empty();
			switch (val) {
				case '_0':
					var real = ii.replace("{1}", "''").replace("{2}", "''");
					$(this).next().append(real);
					break;
				case '_1':
					var real = i.replace("{1}", parseDate(new Date()));
					$(this).next().append(real);
					break;
				case '_2':
					var today = new Date();
					var yestoday = today.getTime() - 1000 * 60 * 60 * 24;
					yestoday = new Date(yestoday);
					var real = i.replace("{1}", parseDate(yestoday));
					$(this).next().append(real);
					break;
				case '_3':
					var today = new Date();
					var yestoday = today.getTime() - 1000 * 60 * 60 * 24 * 2;
					yestoday = new Date(yestoday);
					var real = i.replace("{1}", parseDate(yestoday));
					$(this).next().append(real);
					break;
				case '_4':
					var to = new Date();
					var fm = to.getTime() - 1000 * 60 * 60 * 24 * 2;
					fm = new Date(fm);
					var real = ii.replace("{1}", parseDate(fm)).replace("{2}", parseDate(to));
					$(this).next().append(real);
					break;
				case '_5':
					var to = new Date();
					var fm = to.getTime() - 1000 * 60 * 60 * 24 * 3;
					fm = new Date(fm);
					var real = ii.replace("{1}", parseDate(fm)).replace("{2}", parseDate(to));
					$(this).next().append(real);
					break;
				case '_6':
					var to = new Date();
					var fm = to.getTime() - 1000 * 60 * 60 * 24 * 7;
					fm = new Date(fm);
					var real = ii.replace("{1}", parseDate(fm)).replace("{2}", parseDate(to));
					$(this).next().append(real);
					break;
				case '_7':
					var to = new Date();
					var fm = to.getTime() - 1000 * 60 * 60 * 24 * 30;
					fm = new Date(fm);
					var real = ii.replace("{1}", parseDate(fm)).replace("{2}", parseDate(to));
					$(this).next().append(real);
					break;
				case '_8':
					var to = new Date();
					var fm = to.getTime() - 1000 * 60 * 60 * 24 * 30 * 6;
					fm = new Date(fm);
					var real = ii.replace("{1}", parseDate(fm)).replace("{2}", parseDate(to));
					$(this).next().append(real);
					break;
				case '_9':
					var to = new Date();
					var fm = to.getTime() - 1000 * 60 * 60 * 24 * 365;
					fm = new Date(fm);
					var real = ii.replace("{1}", parseDate(fm)).replace("{2}", parseDate(to));
					$(this).next().append(real);
					break;
			}
		});
		function parseDate(date) {
			var year = date.getFullYear();
			var month = date.getMonth() + 1;
			var day = date.getDate();
			if (month < 10) {
				month = "0" + month;
			}
			if (day < 10) {
				day = "0" + day;
			}
			return year + "-" + month + "-" + day;
		}
	})
</script>
</#macro>




<#--
 | 二级连动下拉单
 | 创建者:杨涛
 | 创建时间：2010-05-16
 | 版本:1.0
 | 参数说明:
 |	type:               三级连动下拉单的类型，必须输入的参数
 |	master:             一级菜单标识
 |	masterLabel:        一级菜单的label
 |	slave:              二级菜单的标识
 |	slaveLabel:         二级菜单的label
 | 使用示例:	<@doubleSelect type="city"/>
 -->
<#macro doubleSelect type master="master" masterLabel="" slave="slave" slaveLabel="">
<td class="lowRight">${masterLabel}</td>
<td>
	<select name="${master}" id="doubleSelect_${master}" style="width:125px;">
		<option>请选择</option>
	</select>
</td>
<td class="lowRight">${slaveLabel}</td>
<td>
	<select name="${slave}" id="doubleSelect_${slave}" style="width:125px;">
		<option>请选择</option>
	</select>
</td>

<script language="javascript" type="text/javascript">
	$(document).ready(function() {
		//加载一级菜单数据
		$("#doubleSelect_${master}").empty();
		$.getJSON(
				'${path}/utl/select.gainMasterData.do?type=${type}',
				function(json) {
					$("#doubleSelect_${master}").append("<option>请选择</option>");
					$.each(json, function(i, item) {
						var option = "<option value='" + item.value + "'>" + item.text + "</option>";
						$("#doubleSelect_${master}").append(option);
					})
				}
				)
		//一级菜单选中时，二级菜单跟随变化
		$("#doubleSelect_${master}").change(function() {
			var val = $(this).val();
			$("#doubleSelect_${slave}").empty();
			var url = '${path}/utl/select.gainSlaveData.do?code=' + val + '&type=${type}'
			$.getJSON(url, function(json) {
				$("#doubleSelect_${slave}").append("<option>请选择</option>");
				$.each(json, function(i, item) {
					var option = "<option value='" + item.value + "'>" + item.text + "</option>";
					$("#doubleSelect_${slave}").append(option);
				})
			})
		})
	})
</script>
</#macro>

<#--
 | 三级连动下拉单
 | 创建者:杨涛
 | 创建时间：2010-05-16
 | 版本:1.0
 | 参数说明:
 |	type:               三级连动下拉单的类型，必须输入的参数
 |	master:             一级菜单标识
 |	masterLabel:        一级菜单的label
 |	slave:              二级菜单的标识
 |	slaveLabel:         二级菜单的label
 |	secondSlave:        三级菜单标识
 |	secondSlaveLabel:   三级菜单的label
 | 使用示例:	<@triSelect type="city"/>
 -->
<#macro triSelect type master="master" masterLabel="" slave="slave" slaveLabel="" secondSlave="secondSlave" secondSlaveLabel="">
<td class="lowRight">${masterLabel}</td>
<td><select name="${master}" id="triSelect_${master}" style="width:125px;">
	<option>请选择</option>
</select>
</td>
<td class="lowRight">${slaveLabel}</td>
<td><select name="${slave}" id="triSelect_${slave}" style="width:125px;">
	<option>请选择</option>
</select>
</td>
<td class="lowRight">${secondSlaveLabel}</td>
<td><select name="${secondSlave}" id="triSelect_${secondSlave}" style="width:125px;">
	<option>请选择</option>
</select>
</td>
<script language="javascript" type="text/javascript">
	$(document).ready(function() {
		//加载一级菜单数据
		$("#doubleSelect_${master}").empty();
		$.getJSON(
				'${path}/utl/select.gainMasterData.do?type=${type}',
				function(json) {
					$.each(json, function(i, item) {
						var option = "<option value='" + item.value + "'>" + item.text + "</option>";
						$("#triSelect_${master}").append(option);
					})
				}
				)
		//一级菜单选中时，二级菜单跟随变化
		$("#triSelect_${master}").change(function() {
			var val = $(this).val();
			$("#triSelect_${slave}").empty();
			var url = '${path}/utl/select.gainSlaveData.do?code=' + val + '&type=${type}'
			$.getJSON(url, function(json) {
				$.each(json, function(i, item) {
					$("#triSelect_${slave}").append("<option>请选择</option>");
					var option = "<option value='" + item.value + "'>" + item.text + "</option>";
					$("#triSelect_${slave}").append(option);
				})
			})
		})

		//二级菜单选中时，三级菜单跟随变化
		$("#triSelect_${slave}").change(function() {
			var val = $(this).val();
			$("#triSelect_${secondSlave}").empty();
			var url = '${path}/utl/select.gainSecondSlaveData.do?code=' + val + '&type=${type}'
			$.getJSON(url, function(json) {
				$("#triSelect_${secondSlave}").append("<option>请选择</option>");
				$.each(json, function(i, item) {
					var option = "<option value='" + item.value + "'>" + item.text + "</option>";
					$("#triSelect_${secondSlave}").append(option);
				})
			})
		})
	})
</script>
</#macro>